              package com.java.diagnostics.visualizer.parser.vgc;
              
              import com.java.diagnostics.visualizer.data.DataLevel;
              import com.java.diagnostics.visualizer.data.DataPoint;
              import com.java.diagnostics.visualizer.data.SourceData;
              import com.java.diagnostics.visualizer.data.TupleDataBuilder;
              import com.java.diagnostics.visualizer.data.axes.XDataAxis;
              import com.java.diagnostics.visualizer.data.axes.YDataAxis;
              import com.java.diagnostics.visualizer.exceptions.GCAndMemoryVisualizerException;
              import com.java.diagnostics.visualizer.factory.DataFactory;
              import com.java.diagnostics.visualizer.gc.defaultextensions.util.Messages;
              import com.java.diagnostics.visualizer.impl.factory.LogFactory;
              import com.java.diagnostics.visualizer.metadata.TupleMetaData;
              import com.java.diagnostics.visualizer.metadata.TupleMetaData.TableField;
              import com.java.diagnostics.visualizer.metadata.TupleMetaData.TableType;
              import com.java.diagnostics.visualizer.parser.vgc.constants.VGCAxes;
              import com.java.diagnostics.visualizer.parser.vgc.converters.AmountFlippedConverter;
              import com.java.diagnostics.visualizer.parser.vgc.converters.GCNumberConverter;
              import com.java.diagnostics.visualizer.parser.vgc.converters.NonLinearHeapPercentConverter;
              import com.java.diagnostics.visualizer.properties.OutputProperties;
              import com.java.diagnostics.visualizer.sources.Source;
              import java.util.Collection;
              import java.util.HashMap;
              import java.util.HashSet;
              import java.util.Map;
              import java.util.Set;
              import java.util.logging.Logger;
              
              public class VGCDataManager
              {
                public static final Logger TRACE = LogFactory.getTrace(VGCDataManager.class);
                protected Source source;
                protected SourceData data;
                protected OutputProperties properties;
                protected XDataAxis xAxis;
                protected GCNumberConverter gcNumberConverter;
                private Map<String, TupleDataBuilder> allTuples = new HashMap();
                private Map<String, YDataAxis> tupleNamesToYAxes = new HashMap();
                protected Set<String> denominatorNames = new HashSet();
                protected static final Map<String, DataFactory> tupleNamesToFactories = new HashMap();
                protected static final Map<String, TupleMetaData.TableType> tupleNamesToTableType = new HashMap();
                protected static final Map<String, TupleMetaData.TableField[]> tupleNamesToTableFields = new HashMap();
              
                private Map<String, AmountFlippedConverter> countTupleNamesToAmountFlippedConverters = new HashMap();
              
                private int currentGCNumber = 0;
                public static final String CATEGORY = "VGC";
                public static final String HEAP_CATEGORY = "VGC heap";
                public static final String PAUSE_CATEGORY = "VGC pause";
                protected static final DataFactory genericfactory = DataFactory.getFactory("VGC");
              
                protected static final DataFactory heapFactory = DataFactory.getFactory("VGC heap");
              
                protected static final DataFactory pauseFactory = DataFactory.getFactory("VGC pause");
              
                private static final DataFactory hiddenFactory = DataFactory.getFactory(DataFactory.HIDDEN);
              
                static {
                  String[] hiddenTupleNames = { "VGCLabels.free.flat.heap.after.all.gcs", 
                    "VGCLabels.total.flat.heap.after.all.gcs", "VGCLabels.free.nursery.heap.after.all.gcs", 
                    "VGCLabels.total.nursery.heap.after.all.gcs", "VGCLabels.nursery.size.before", 
                    "VGCLabels.total.flat.heap.before.gc", "VGCLabels.free.tenured.heap.after.all.gcs", 
                    "VGCLabels.total.tenured.heap.before.gc", "VGCLabels.objects.flipped", 
                    "VGCLabels.objects.compacted", "VGCLabels.objects.tenured", "VGCLabels.objects.flipped", 
                    "VGCLabels.objects.failed.flipped", "VGCLabels.objects.failed.tenured", "VGCLabels.af.success", 
                    "VGCLabels.gmp.collections", "VGCLabels.partial.warnings", "VGCLabels.gmp.cycle.time", 
                    "VGCLabels.objects.copied.eden", "VGCLabels.objects.copied.other", 
                    "VGCLabels.non.local.percent.numa", "VGCLabels.arraylet.leaf", "VGCLabels.gc.percolated" };
                  String[] pauseTupleNames = { "VGCLabels.mark.times", "VGCLabels.sweep.times", 
                    "VGCLabels.compact.times", "VGCLabels.card.cleaning.times", 
                    "VGCLabels.pause.times.with.exclusive.access", "VGCLabels.exclusive.access.times", 
                    "VGCLabels.class.unloading.time", "VGCLabels.classloader.unloading.time", 
                    "VGCLabels.trigger.intervals", "VGCLabels.pause.times.without.exclusive.access", 
                    "VGCLabels.gc.intervals", "VGCLabels.root.scan.times", "VGCLabels.stop.thread.times", 
                    "VGCLabels.start.thread.times", "VGCLabels.user.time", "VGCLabels.sys.time", "VGCLabels.real.time", 
                    "VGCLabels.cms.mark.cpu.time", "VGCLabels.cms.mark.real.time", "VGCLabels.cms.preclean.cpu.time", 
                    "VGCLabels.cms.preclean.real.time", "VGCLabels.cms.sweep.cpu.time", 
                    "VGCLabels.cms.sweep.real.time", "VGCLabels.cms.reset.cpu.time", "VGCLabels.cms.reset.real.time", 
                    "VGCLabels.cms.abortable.preclean.cpu.time", 
                    "VGCLabels.cms.abortable.preclean.real.time", "VGCLabels.copy.forward.time", 
                    "VGCLabels.scavenge.time", "VGCLabels.af.intervals", "VGCLabels.sys.intervals", "VGCLabels.con.intervals", 
                    "VGCLabels.at.intervals", "WRTLabels.synch.gc.durations", "WRTLabels.min.exclusive.access", 
                    "WRTLabels.max.exclusive.access", "WRTLabels.mean.exclusive.access", "WRTLabels.min.gc.quantum.time", 
                    "WRTLabels.max.gc.quantum.time", "WRTLabels.mean.gc.quantum.time" };
                  String[] heapTupleNames = { "VGCLabels.amount.compacted", 
                    "VGCLabels.free.nursery.heap", "VGCLabels.nursery.size", 
                    "VGCLabels.live.nursery.heap.after.gc", "VGCLabels.free.tenured.heap", 
                    "VGCLabels.tenured.heap.size", "VGCLabels.live.tenured.heap.after.gc", 
                    "VGCLabels.free.nursery.heap.before.gc", "VGCLabels.live.nursery.heap.before.gc", 
                    "VGCLabels.free.tenured.heap.before.gc", "VGCLabels.live.tenured.heap.before.gc", 
                    "VGCLabels.free.flat.heap", "VGCLabels.flat.heap.size", "VGCLabels.amount.freed", 
                    "VGCLabels.live.normal.heap.after.gc", "VGCLabels.allocation.per.cycle", 
                    "VGCLabels.free.flat.heap.before.gc", "VGCLabels.live.normal.heap.before.gc", 
                    "VGCLabels.permanent.heap.size", "VGCLabels.live.permanent.heap.before.gc", 
                    "VGCLabels.live.permanent.heap.after.gc", "VGCLabels.free.loa.after.collection", 
                    "VGCLabels.used.loa.after.collection", "VGCLabels.total.loa.after", "VGCLabels.free.soa.after.collection", 
                    "VGCLabels.total.soa.after", "VGCLabels.free.loa.before.collection", "VGCLabels.total.loa.before", 
                    "VGCLabels.free.soa.before.collection", "VGCLabels.total.soa.before", "VGCLabels.amount.tenured", 
                    "VGCLabels.amount.flipped", "VGCLabels.amount.failed.flipped", "VGCLabels.amount.failed.tenured", 
                    "VGCLabels.tenure.age", "VGCLabels.tilt.ratio", "VGCLabels.cms.heap.used.at.mark.kickoff", 
                    "VGCLabels.cms.heap.size.at.mark.kickoff", "VGCLabels.cms.heap.used.at.remark.kickoff", 
                    "VGCLabels.cms.heap.size.at.remark.kickoff", "VGCLabels.eden.size", "VGCLabels.free.eden", 
                    "VGCLabels.free.remembered.set", "VGCLabels.total.remembered.set", "VGCLabels.common.numa.start", 
                    "VGCLabels.local.numa.start", "VGCLabels.non.local.numa.start", "VGCLabels.common.numa.end", 
                    "VGCLabels.local.numa.end", "VGCLabels.non.local.numa.end", "VGCLabels.amount.copied.eden", 
                    "VGCLabels.amount.copied.other", "WRTLabels.free.heap.min", "WRTLabels.free.heap.max", 
                    "WRTLabels.free.heap.mean", "WRTLabels.free.immortal.min", "WRTLabels.free.immortal.max", 
                    "WRTLabels.free.immortal.mean", "WRTLabels.free.heap.cycles" };
                  String[] genericTupleNames = { "VGCLabels.trace.target", 
                    "VGCLabels.request.sizes.which.triggered.failures", "VGCLabels.intended.kickoff", "VGCLabels.concurrent.kickoff", 
                    "VGCLabels.cards.cleaned", "VGCLabels.cards.traced", "VGCLabels.soft.references.cleared", 
                    "VGCLabels.phantom.references.cleared", "VGCLabels.weak.references.cleared", 
                    "VGCLabels.soft.references.before.collection", "VGCLabels.phantom.references.before.collection", 
                    "VGCLabels.weak.references.before.collection", "VGCLabels.soft.references.after.collection", 
                    "VGCLabels.phantom.references.after.collection", "VGCLabels.weak.references.after.collection", 
                    "VGCLabels.max.soft.reference.threshold", "VGCLabels.weak.references.queued", 
                    "VGCLabels.soft.references.queued", "VGCLabels.phantom.references.queued", 
                    "VGCLabels.final.references.queued", "VGCLabels.final.references.cleared", 
                    "VGCLabels.jni.references.cleared", "VGCLabels.jni.references.queued", 
                    "VGCLabels.dynamic.soft.reference.threshold", "VGCLabels.classes.unloaded", 
                    "VGCLabels.class.loaders.unloaded", "VGCLabels.objects.queued.for.finalization", 
                    "VGCLabels.pinned.classes", "VGCLabels.trace.rate", "VGCLabels.jvm.restarts", "VGCLabels.gc.reasons", 
                    "VGCLabels.gc.scopes", "VGCLabels.action", "VGCLabels.primitive.arraylet.largest.object", 
                    "VGCLabels.primitive.arraylet.leaves", "VGCLabels.primitive.arraylet.objects", 
                    "VGCLabels.reference.arraylet.largest.object", "VGCLabels.reference.arraylet.leaves", 
                    "VGCLabels.reference.arraylet.objects", "WRTLabels.gc.activity", "WRTLabels.quanta.per.heartbeat", 
                    "WRTLabels.min.gc.thread.priority", "WRTLabels.max.gc.thread.priority", "WRTLabels.trigger.durations", "WRTLabels.quantum.type" };
                  String[] arrayOfString1 = hiddenTupleNames; int j = hiddenTupleNames.length; for (int i = 0; i < j; i++) { String name = arrayOfString1[i];
                    tupleNamesToFactories.put(name, hiddenFactory);
                  }
                  for (String name : pauseTupleNames) {
                    tupleNamesToFactories.put(name, pauseFactory);
                  }
                  for (String name : heapTupleNames) {
                    tupleNamesToFactories.put(name, heapFactory);
                  }
                  for (String name : genericTupleNames) {
                    tupleNamesToFactories.put(name, genericfactory);
                  }
              
                  tupleNamesToTableType.put("VGCLabels.free.flat.heap.after.all.gcs", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.total.flat.heap.after.all.gcs", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.nursery.heap.after.all.gcs", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.total.nursery.heap.after.all.gcs", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.nursery.size.before", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.total.flat.heap.before.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.tenured.heap.after.all.gcs", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.total.tenured.heap.before.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.objects.flipped", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.objects.compacted", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.objects.tenured", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.objects.flipped", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.objects.failed.flipped", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.objects.failed.tenured", TupleMetaData.TableType.ARITHMETIC);
              
                  tupleNamesToTableType.put("VGCLabels.mark.times", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.sweep.times", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.compact.times", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.copy.forward.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.scavenge.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.card.cleaning.times", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.gmp.cycle.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType
                    .put("VGCLabels.pause.times.with.exclusive.access", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.exclusive.access.times", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.class.unloading.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.classloader.unloading.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.trigger.intervals", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.pause.times.without.exclusive.access", 
                    TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.gc.intervals", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.root.scan.times", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.stop.thread.times", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.start.thread.times", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.user.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.sys.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.real.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.mark.cpu.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.mark.real.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.preclean.cpu.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.preclean.real.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.sweep.cpu.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.sweep.real.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.reset.cpu.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.reset.real.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.abortable.preclean.cpu.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.abortable.preclean.real.time", TupleMetaData.TableType.ARITHMETIC);
              
                  tupleNamesToTableType.put("VGCLabels.amount.compacted", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.nursery.heap", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.nursery.size", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.eden.size", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.eden", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.common.numa.start", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.local.numa.start", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.non.local.numa.start", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.non.local.percent.numa", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.common.numa.end", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.local.numa.end", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.non.local.numa.end", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.total.remembered.set", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.remembered.set", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.live.nursery.heap.after.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.tenured.heap", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.tenured.heap.size", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.live.tenured.heap.after.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.nursery.heap.before.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.live.nursery.heap.before.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.tenured.heap.before.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.live.tenured.heap.before.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.flat.heap", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.flat.heap.size", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.amount.freed", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.live.normal.heap.after.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.allocation.per.cycle", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.flat.heap.before.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.live.normal.heap.before.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.permanent.heap.size", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.live.permanent.heap.before.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.live.permanent.heap.after.gc", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.loa.after.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.used.loa.after.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.total.loa.after", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.soa.after.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.total.soa.after", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.loa.before.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.total.loa.before", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.free.soa.before.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.total.soa.before", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.amount.tenured", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.amount.flipped", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.amount.failed.flipped", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.amount.failed.tenured", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.tenure.age", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.tilt.ratio", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.heap.used.at.mark.kickoff", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.heap.size.at.mark.kickoff", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.heap.used.at.remark.kickoff", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cms.heap.size.at.remark.kickoff", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.trace.target", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.request.sizes.which.triggered.failures", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.intended.kickoff", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.concurrent.kickoff", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cards.cleaned", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.cards.traced", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.soft.references.cleared", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.phantom.references.cleared", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.weak.references.cleared", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.soft.references.before.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.phantom.references.before.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.weak.references.before.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.soft.references.after.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.phantom.references.after.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.weak.references.after.collection", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.max.soft.reference.threshold", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.weak.references.queued", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.soft.references.queued", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.phantom.references.queued", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.final.references.queued", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.final.references.cleared", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.jni.references.cleared", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.jni.references.queued", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.dynamic.soft.reference.threshold", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.classes.unloaded", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.class.loaders.unloaded", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.objects.queued.for.finalization", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.pinned.classes", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.trace.rate", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.jvm.restarts", TupleMetaData.TableType.COUNT);
                  tupleNamesToTableType.put("VGCLabels.gc.reasons", TupleMetaData.TableType.FREQUENCY);
                  tupleNamesToTableType.put("VGCLabels.gc.scopes", TupleMetaData.TableType.FREQUENCY);
                  tupleNamesToTableType.put("VGCLabels.action", TupleMetaData.TableType.FREQUENCY);
                  tupleNamesToTableType.put("VGCLabels.af.success", TupleMetaData.TableType.NONE);
                  tupleNamesToTableType.put("VGCLabels.gc.percolated", TupleMetaData.TableType.NONE);
                  tupleNamesToTableType.put("VGCLabels.gmp.collections", TupleMetaData.TableType.NONE);
                  tupleNamesToTableType.put("VGCLabels.partial.warnings", TupleMetaData.TableType.NONE);
                  tupleNamesToTableType.put("VGCLabels.amount.copied.eden", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.amount.copied.other", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.objects.copied.eden", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.objects.copied.other", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType
                    .put("VGCLabels.primitive.arraylet.largest.object", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.primitive.arraylet.leaves", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.primitive.arraylet.objects", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType
                    .put("VGCLabels.reference.arraylet.largest.object", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.reference.arraylet.leaves", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.reference.arraylet.objects", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.arraylet.leaf", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.af.intervals", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.sys.intervals", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.con.intervals", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("VGCLabels.at.intervals", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.synch.gc.durations", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.min.exclusive.access", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.max.exclusive.access", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.mean.exclusive.access", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.free.heap.min", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.free.heap.max", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.free.heap.mean", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.free.immortal.min", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.free.heap.max", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.free.heap.mean", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.min.gc.quantum.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.max.gc.quantum.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.mean.gc.quantum.time", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.gc.activity", TupleMetaData.TableType.FREQUENCY);
                  tupleNamesToTableType.put("WRTLabels.quantum.type", TupleMetaData.TableType.FREQUENCY);
                  tupleNamesToTableType.put("WRTLabels.quanta.per.heartbeat", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.min.gc.thread.priority", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.max.gc.thread.priority", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.trigger.durations", TupleMetaData.TableType.ARITHMETIC);
                  tupleNamesToTableType.put("WRTLabels.free.heap.cycles", TupleMetaData.TableType.ARITHMETIC);
              
                  tupleNamesToTableFields.put("VGCLabels.free.flat.heap.after.all.gcs", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.total.flat.heap.after.all.gcs", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.nursery.heap.after.all.gcs", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.total.nursery.heap.after.all.gcs", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.nursery.size.before", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.eden.size", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.eden", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.common.numa.start", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.local.numa.start", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.non.local.numa.start", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.non.local.percent.numa", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.common.numa.end", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.local.numa.end", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.non.local.numa.end", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.total.remembered.set", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.remembered.set", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.total.flat.heap.before.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.tenured.heap.after.all.gcs", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.total.tenured.heap.before.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.objects.flipped", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.objects.compacted", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.objects.tenured", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.objects.flipped", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.objects.failed.flipped", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.objects.failed.tenured", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.mark.times", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.sweep.times", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.compact.times", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.copy.forward.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.scavenge.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.card.cleaning.times", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.gmp.cycle.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.pause.times.with.exclusive.access", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.exclusive.access.times", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.class.unloading.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.classloader.unloading.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.trigger.intervals", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.pause.times.without.exclusive.access", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.gc.intervals", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.root.scan.times", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.stop.thread.times", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.start.thread.times", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.user.time", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.sys.time", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.real.time", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.mark.cpu.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.mark.real.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.preclean.cpu.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.preclean.real.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.sweep.cpu.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.sweep.real.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.reset.cpu.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.reset.real.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.abortable.preclean.cpu.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cms.abortable.preclean.real.time", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.amount.compacted", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.free.nursery.heap", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.nursery.size", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.live.nursery.heap.after.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.tenured.heap", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.tenured.heap.size", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.live.tenured.heap.after.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.nursery.heap.before.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.live.nursery.heap.before.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.tenured.heap.before.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.live.tenured.heap.before.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.flat.heap", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.flat.heap.size", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.amount.freed", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.live.normal.heap.after.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.allocation.per.cycle", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.flat.heap.before.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.live.normal.heap.before.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.permanent.heap.size", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.live.permanent.heap.before.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.live.permanent.heap.after.gc", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.loa.after.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.used.loa.after.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.total.loa.after", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.soa.after.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.total.soa.after", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.loa.before.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.total.loa.before", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.free.soa.before.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.total.soa.before", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.amount.tenured", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.amount.flipped", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.amount.failed.flipped", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.amount.failed.tenured", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.tenure.age", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.tilt.ratio", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.cms.heap.used.at.mark.kickoff", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.cms.heap.size.at.mark.kickoff", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.cms.heap.used.at.remark.kickoff", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.cms.heap.size.at.remark.kickoff", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.trace.target", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.request.sizes.which.triggered.failures", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.intended.kickoff", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.concurrent.kickoff", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.cards.cleaned", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.cards.traced", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.soft.references.cleared", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.phantom.references.cleared", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.weak.references.cleared", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.soft.references.before.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.phantom.references.before.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.weak.references.before.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.soft.references.after.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.phantom.references.after.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.weak.references.after.collection", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.max.soft.reference.threshold", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.weak.references.queued", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.soft.references.queued", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.phantom.references.queued", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.final.references.queued", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.final.references.cleared", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.jni.references.cleared", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.jni.references.queued", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.dynamic.soft.reference.threshold", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.classes.unloaded", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.class.loaders.unloaded", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.objects.queued.for.finalization", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.pinned.classes", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.trace.rate", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.jvm.restarts", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.primitive.arraylet.largest.object", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.primitive.arraylet.leaves", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.primitive.arraylet.objects", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.reference.arraylet.largest.object", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.reference.arraylet.leaves", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.reference.arraylet.objects", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("VGCLabels.amount.copied.eden", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.amount.copied.other", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.objects.copied.eden", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.objects.copied.other", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.objects.copied.other", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.arraylet.leaf", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.af.intervals", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.sys.intervals", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.con.intervals", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("VGCLabels.at.intervals", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("WRTLabels.synch.gc.durations", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("WRTLabels.min.exclusive.access", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.max.exclusive.access", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.mean.exclusive.access", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.free.heap.min", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.free.heap.max", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.free.heap.mean", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.free.immortal.min", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.free.immortal.max", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.free.immortal.mean", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.min.gc.quantum.time", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("WRTLabels.max.gc.quantum.time", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("WRTLabels.mean.gc.quantum.time", new TupleMetaData.TableField[] { 
                    TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("WRTLabels.gc.activity", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("WRTLabels.quantum.type", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("WRTLabels.quanta.per.heartbeat", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX, TupleMetaData.TableField.TOTAL });
                  tupleNamesToTableFields.put("WRTLabels.min.gc.thread.priority", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.max.gc.thread.priority", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.trigger.durations", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                  tupleNamesToTableFields.put("WRTLabels.free.heap.cycles", 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX });
                }
              
                protected VGCDataManager()
                {
                }
              
                public VGCDataManager(Source source, SourceData data, OutputProperties properties)
                {
                  this.source = source;
                  this.data = data;
                  this.properties = properties;
                  createXAxis();
                  createYAxes();
                }
              
                public void setX(double timestamp)
                {
                  this.xAxis.setX(timestamp);
                  this.currentGCNumber += 1;
                  this.gcNumberConverter.addPoint(this.xAxis.getSequenceUID(), this.currentGCNumber);
                }
              
                public double getCurrentX()
                {
                  return this.xAxis.getX();
                }
              
                public void complete()
                {
                  for (TupleDataBuilder tuple : (TupleDataBuilder[])this.allTuples.values().toArray(new TupleDataBuilder[0]))
                    
                  {
                    this.data.addData(tuple, DataLevel.VARIANT);
                 //added by wenguang.huang 
                 this.data.addData(tuple, DataLevel.DATASET);
				//added end by wenguang.huang 
      

                  }
                  
                  if (this.xAxis.supportsNormalisation())
                    this.xAxis.updateNormalisation(this.data);
                }
              
                public void addPoint(String label, double y, String comment)
                {
                  TupleDataBuilder tuple = getTuple(label);
                  tuple.addDataPoint(y, comment.intern());
                  AmountFlippedConverter flippedConverter = 
                    (AmountFlippedConverter)this.countTupleNamesToAmountFlippedConverters
                    .get(label);
                  if (flippedConverter != null)
                    flippedConverter.addPoint(this.xAxis.getSequenceUID(), y);
                }
              
                public void updateLastComment(String label, String comment)
                {
                  TupleDataBuilder tuple = getTuple(label);
                  DataPoint point = tuple.getLastDataPoint();
                  if (point != null)
                  {
                    point.setComment(point.getComment() + comment);
                  }
                }
              
                public double getLastValue(String label)
                {
                  TupleDataBuilder tuple = getTuple(label);
                  return tuple.getLastDataPoint().getRawY();
                }
              
                public boolean ensureExistanceOf(String label)
                {
                  TupleDataBuilder tuple = getTuple(label);
                  if (tuple == null) {
                    TRACE.warning("Unable to create tuple: " + label);
                  }
                  return tuple != null;
                }
              
                public boolean fieldHasValues(String label)
                {
                  TupleDataBuilder tuple = getTuple(label);
                  if ((tuple == null) || (tuple.isEmpty())) {
                    return false;
                  }
                  return true;
                }
              
                public void createDynamicCountField(String label)
                {
                  YDataAxis numberAxis = VGCAxes.prepareNumberAxis(this.properties);
                  mapTupleNamesToAxis(new String[] { label }, numberAxis);
              
                  TupleDataBuilder tuple = heapFactory.createTupleData(label, label, 
                    this.xAxis, numberAxis);
                  tuple.setTupleMetaData(new TupleMetaData(TupleMetaData.TableType.NONE, null));
                  this.allTuples.put(label, tuple);
                  this.data.addData(tuple, DataLevel.VARIANT);
                }
              
                public void createDynamicBytesField(String label)
                {
                  YDataAxis bytesAxis = VGCAxes.prepareHeapAxis(this.properties);
                  mapTupleNamesToAxis(new String[] { label }, bytesAxis);
              
                  TupleDataBuilder tuple = heapFactory.createTupleData(label, label, 
                    this.xAxis, bytesAxis);
                  tuple.setTupleMetaData(new TupleMetaData(TupleMetaData.TableType.NONE, null));
                  this.allTuples.put(label, tuple);
                  this.data.addData(tuple, DataLevel.VARIANT);
                }
              
                public void createDynamicBytesFieldWithTable(String label)
                {
                  YDataAxis bytesAxis = VGCAxes.prepareHeapAxis(this.properties);
                  mapTupleNamesToAxis(new String[] { label }, bytesAxis);
              
                  TupleDataBuilder tuple = heapFactory.createTupleData(label, label, 
                    this.xAxis, bytesAxis);
                  tuple.setTupleMetaData(new TupleMetaData(TupleMetaData.TableType.ARITHMETIC, 
                    new TupleMetaData.TableField[] { TupleMetaData.TableField.MEAN, TupleMetaData.TableField.MIN, TupleMetaData.TableField.MAX }));
                  this.allTuples.put(label, tuple);
                  this.data.addData(tuple, DataLevel.VARIANT);
                }
              
                public void createDynamicPauseField(String label)
                {
                  YDataAxis numberAxis = VGCAxes.prepareTimeAxis(this.properties);
                  mapTupleNamesToAxis(new String[] { label }, numberAxis);
              
                  TupleDataBuilder tuple = heapFactory.createTupleData(label, label, 
                    this.xAxis, numberAxis);
                  tuple.setTupleMetaData(new TupleMetaData(TupleMetaData.TableType.NONE, null));
                  this.allTuples.put(label, tuple);
                  this.data.addData(tuple, DataLevel.VARIANT);
               
                }
                
                private TupleDataBuilder getTuple(String label)
                {
                  TupleDataBuilder tuple = (TupleDataBuilder)this.allTuples.get(label);
                  if (tuple != null) {
                    return tuple;
                  }
              
                  YDataAxis yAxis = (YDataAxis)this.tupleNamesToYAxes.get(label);
                  DataFactory factory = (DataFactory)tupleNamesToFactories.get(label);
                  if ((yAxis != null) && (factory != null))
                  {
                    tuple = factory.createTupleData(label, getLabel(label), this.xAxis, 
                      yAxis);
                    this.allTuples.put(label, tuple);
              
                    if (this.denominatorNames.contains(label)) {
                      NonLinearHeapPercentConverter heapConverter = new NonLinearHeapPercentConverter(
                        tuple);
                      try {
                        tuple.getYAxis().addUnitConverter(heapConverter);
                      } catch (GCAndMemoryVisualizerException localGCAndMemoryVisualizerException) {
                        TRACE
                          .warning("Exception adding NonLinearNonLinearHeapPercentConverter to " + 
                          label);
                      }
                    }
                    if (tupleNamesToTableType.containsKey(label)) {
                      TupleMetaData.TableType tableType = (TupleMetaData.TableType)tupleNamesToTableType.get(label);
                      TupleMetaData.TableField[] tableFields = (TupleMetaData.TableField[])tupleNamesToTableFields.get(label);
                      TupleMetaData metaData = new TupleMetaData(tableType, 
                        tableFields);
                      tuple.setTupleMetaData(metaData);
                    }
                    return tuple;
                  }
                  TRACE.warning("Unknown tuple: " + label + " requested.");
                  Thread.dumpStack();
                  return null;
                }
              
                protected String getLabel(String name) {
                  return Messages.getString(name);
                }
              
                protected final void mapTupleNamesToAxis(String[] names, YDataAxis axis)
                {
                  for (String name : names)
                    if (this.tupleNamesToYAxes.get(name) != null) {
                      TRACE.warning(name + 
                        " already mapped to Axis " + 
                        ((YDataAxis)this.tupleNamesToYAxes.get(name)).getLabel() + 
                        " not remapping to " + axis.getLabel());
                    }
                    else
                      this.tupleNamesToYAxes.put(name, axis);
                }
              
                protected void createXAxis()
                {
                  this.gcNumberConverter = new GCNumberConverter();
                  this.xAxis = VGCAxes.prepareXAxis(this.source, this.gcNumberConverter, this.properties);
                }
              
                public void createXAxis(boolean supportsNormalisation) {
                  if (this.xAxis == null) {
                    this.gcNumberConverter = new GCNumberConverter();
                    this.xAxis = 
                      VGCAxes.prepareXAxis(this.source, this.gcNumberConverter, this.properties, 
                      supportsNormalisation);
                  }
                }
              
                protected void createYAxes()
                {
                  try
                  {
                    createCMSMarkHeapAxis();
                    createCMSRemarkHeapAxis();
                    createAmountCompactedAxis();
                    createFreeNurseryAxis();
                    createFreeTenuredAxis();
                    createFreeNurseryBeforeAxis();
                    createFreeTenuredBeforeAxis();
                    createFlatAxis();
                    createFlatBeforeAxis();
                    createFlatAfterAllAxis();
                    createNurseryAfterAllAxis();
                    createFreeLOAAfterAxis();
                    createFreeSOAAfterAxis();
                    createFreeLOABeforeAxis();
                    createFreeSOABeforeAxis();
                    createPermenantAxis();
                    createTimeAxis();
                    createBytesAxis();
                    createNumberAxis();
                    createPercentAxis();
                    createRateAxis();
                    createAgeAxis();
                    createObjectsTenuredAxis();
                    createObjectsFailedTenuredAxis();
                    createFlippedAxis();
                    createFailedFlippedAxis();
                    createRestartAxis();
                    createGCReasonsAxis();
                    createGCScopesAxis();
                    createAFSuccessAxis();
                    createActionAxis();
                    createEdenAxis();
                    createRemeberedSetAxis();
                    createNUMAStartAxis();
                    createNUMAEndAxis();
                    createCopiedFromEdenAxis();
                    createCopiedFromOtherAxis();
                    createGCPercolatedAxis();
                    createGCActivityAxis();
                    createDiscreteNumberAxis();
                    createQuantumTypeAxis();
                  } catch (GCAndMemoryVisualizerException e) {
                    TRACE.warning(e.toString());
                  }
                }
              
                private void createCMSMarkHeapAxis()
                {
                  YDataAxis heapAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.cms.heap.used.at.mark.kickoff", 
                    "VGCLabels.cms.heap.size.at.mark.kickoff" };
                  this.denominatorNames.add("VGCLabels.cms.heap.size.at.mark.kickoff");
                  mapTupleNamesToAxis(names, heapAxis);
                }
              
                private void createCMSRemarkHeapAxis() {
                  YDataAxis heapAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.cms.heap.used.at.remark.kickoff", 
                    "VGCLabels.cms.heap.size.at.remark.kickoff" };
                  this.denominatorNames.add("VGCLabels.cms.heap.size.at.remark.kickoff");
                  mapTupleNamesToAxis(names, heapAxis);
                }
              
                private void createAmountCompactedAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis compactedAxis = 
                    VGCAxes.prepareObjectsMovedAxis(this.properties);
              
                  String[] names = { "VGCLabels.amount.compacted" };
                  AmountFlippedConverter amountCompactedConverter = new AmountFlippedConverter();
              
                  compactedAxis.addUnitConverter(amountCompactedConverter);
                  this.countTupleNamesToAmountFlippedConverters.put("VGCLabels.objects.compacted", 
                    amountCompactedConverter);
                  mapTupleNamesToAxis(names, compactedAxis);
                }
              
                private void createEdenAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis totalEdenAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.eden", "VGCLabels.eden.size" };
              
                  this.denominatorNames.add("VGCLabels.eden.size");
                  mapTupleNamesToAxis(names, totalEdenAxis);
                }
              
                private void createNUMAStartAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis numaAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.common.numa.start", "VGCLabels.local.numa.start", 
                    "VGCLabels.non.local.numa.start", "VGCLabels.total.numa.start" };
              
                  this.denominatorNames.add("VGCLabels.total.numa.start");
                  mapTupleNamesToAxis(names, numaAxis);
                }
              
                private void createNUMAEndAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis numaAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.common.numa.end", "VGCLabels.local.numa.end", 
                    "VGCLabels.non.local.numa.end", "VGCLabels.total.numa.end" };
              
                  this.denominatorNames.add("VGCLabels.total.numa.end");
                  mapTupleNamesToAxis(names, numaAxis);
                }
              
                private void createRemeberedSetAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis rememberedSetAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.total.remembered.set", "VGCLabels.free.remembered.set" };
              
                  this.denominatorNames.add("VGCLabels.total.remembered.set");
                  mapTupleNamesToAxis(names, rememberedSetAxis);
                }
              
                private void createFreeNurseryAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis freeNurseryAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.nursery.heap", "VGCLabels.nursery.size", 
                    "VGCLabels.live.nursery.heap.after.gc" };
              
                  this.denominatorNames.add("VGCLabels.nursery.size");
                  mapTupleNamesToAxis(names, freeNurseryAxis);
                }
              
                private void createFreeTenuredAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis freeTenuredAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.tenured.heap", "VGCLabels.tenured.heap.size", 
                    "VGCLabels.free.tenured.heap.after.all.gcs", "VGCLabels.live.tenured.heap.after.gc" };
              
                  this.denominatorNames.add("VGCLabels.tenured.heap.size");
                  mapTupleNamesToAxis(names, freeTenuredAxis);
                }
              
                private void createFreeNurseryBeforeAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis freeNurseryBeforeAxis = 
                    VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.nursery.heap.before.gc", 
                    "VGCLabels.nursery.size.before", "VGCLabels.live.nursery.heap.before.gc" };
              
                  this.denominatorNames.add("VGCLabels.nursery.size.before");
                  mapTupleNamesToAxis(names, freeNurseryBeforeAxis);
                }
              
                private void createFreeTenuredBeforeAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis freeTenuredBeforeAxis = 
                    VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.tenured.heap.before.gc", 
                    "VGCLabels.total.tenured.heap.before.gc", "VGCLabels.live.tenured.heap.before.gc" };
              
                  this.denominatorNames.add("VGCLabels.total.tenured.heap.before.gc");
                  mapTupleNamesToAxis(names, freeTenuredBeforeAxis);
                }
              
                private void createFlatAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis flatAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.flat.heap", "VGCLabels.flat.heap.size", 
                    "VGCLabels.amount.freed", "VGCLabels.live.normal.heap.after.gc", "VGCLabels.allocation.per.cycle" };
              
                  this.denominatorNames.add("VGCLabels.flat.heap.size");
                  mapTupleNamesToAxis(names, flatAxis);
                }
              
                private void createFlatBeforeAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis flatBeforeAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.total.flat.heap.before.gc", 
                    "VGCLabels.free.flat.heap.before.gc", "VGCLabels.live.normal.heap.before.gc" };
              
                  this.denominatorNames.add("VGCLabels.total.flat.heap.before.gc");
                  mapTupleNamesToAxis(names, flatBeforeAxis);
                }
              
                private void createPermenantAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis permenantBeforeAxis = 
                    VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.permanent.heap.size", "VGCLabels.live.permanent.heap.before.gc", 
                    "VGCLabels.live.permanent.heap.after.gc" };
              
                  this.denominatorNames.add("VGCLabels.permanent.heap.size");
                  mapTupleNamesToAxis(names, permenantBeforeAxis);
                }
              
                private void createFlatAfterAllAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis flatAfterAllAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.flat.heap.after.all.gcs", 
                    "VGCLabels.total.flat.heap.after.all.gcs" };
              
                  this.denominatorNames.add("VGCLabels.total.flat.heap.after.all.gcs");
                  mapTupleNamesToAxis(names, flatAfterAllAxis);
                }
              
                private void createNurseryAfterAllAxis() {
                  YDataAxis nurseryAfterAllAxis = 
                    VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.nursery.heap.after.all.gcs", 
                    "VGCLabels.total.nursery.heap.after.all.gcs" };
              
                  this.denominatorNames.add("VGCLabels.total.nursery.heap.after.all.gcs");
                  mapTupleNamesToAxis(names, nurseryAfterAllAxis);
                }
              
                private void createFreeLOAAfterAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis freeLOAAfterAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.loa.after.collection", "VGCLabels.used.loa.after.collection", 
                    "VGCLabels.total.loa.after" };
              
                  this.denominatorNames.add("VGCLabels.total.loa.after");
                  mapTupleNamesToAxis(names, freeLOAAfterAxis);
                }
              
                private void createFreeSOAAfterAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis freeSOAAfterAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.soa.after.collection", "VGCLabels.total.soa.after" };
              
                  this.denominatorNames.add("VGCLabels.total.soa.after");
                  mapTupleNamesToAxis(names, freeSOAAfterAxis);
                }
              
                private void createFreeLOABeforeAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis freeLOABeforeAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.loa.before.collection", "VGCLabels.total.loa.before" };
              
                  this.denominatorNames.add("VGCLabels.total.loa.before");
                  mapTupleNamesToAxis(names, freeLOABeforeAxis);
                }
              
                private void createFreeSOABeforeAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis freeSOABeforeAxis = VGCAxes.prepareHeapAxis(this.properties);
              
                  String[] names = { "VGCLabels.free.soa.before.collection", "VGCLabels.total.soa.before" };
              
                  this.denominatorNames.add("VGCLabels.total.soa.before");
                  mapTupleNamesToAxis(names, freeSOABeforeAxis);
                }
              
                private void createTimeAxis() {
                  YDataAxis timeAxis = VGCAxes.prepareTimeAxis(this.properties);
              
                  String[] names = { "VGCLabels.mark.times", "VGCLabels.sweep.times", "VGCLabels.compact.times", 
                    "VGCLabels.copy.forward.time", "VGCLabels.scavenge.time", "VGCLabels.card.cleaning.times", 
                    "VGCLabels.pause.times.with.exclusive.access", "VGCLabels.exclusive.access.times", 
                    "VGCLabels.class.unloading.time", "VGCLabels.classloader.unloading.time", 
                    "VGCLabels.trigger.intervals", "VGCLabels.pause.times.without.exclusive.access", 
                    "VGCLabels.gc.intervals", "VGCLabels.root.scan.times", "VGCLabels.stop.thread.times", 
                    "VGCLabels.start.thread.times", "VGCLabels.user.time", "VGCLabels.sys.time", "VGCLabels.real.time", 
                    "VGCLabels.cms.mark.cpu.time", "VGCLabels.cms.mark.real.time", "VGCLabels.cms.preclean.cpu.time", 
                    "VGCLabels.cms.preclean.real.time", "VGCLabels.cms.sweep.cpu.time", 
                    "VGCLabels.cms.sweep.real.time", "VGCLabels.cms.reset.cpu.time", "VGCLabels.cms.reset.real.time", 
                    "VGCLabels.cms.abortable.preclean.cpu.time", 
                    "VGCLabels.cms.abortable.preclean.real.time", "VGCLabels.partial.warnings", 
                    "VGCLabels.gmp.cycle.time", "VGCLabels.af.intervals", "VGCLabels.sys.intervals", "VGCLabels.con.intervals", 
                    "VGCLabels.at.intervals", "WRTLabels.synch.gc.durations", "WRTLabels.min.exclusive.access", 
                    "WRTLabels.max.exclusive.access", "WRTLabels.mean.exclusive.access", "WRTLabels.min.gc.quantum.time", 
                    "WRTLabels.max.gc.quantum.time", "WRTLabels.mean.gc.quantum.time", "WRTLabels.trigger.durations" };
                  mapTupleNamesToAxis(names, timeAxis);
                }
              
                private void createBytesAxis() {
                  YDataAxis bytesAxis = VGCAxes.prepareBytesAxis(this.properties);
              
                  String[] names = { "VGCLabels.request.sizes.which.triggered.failures", "VGCLabels.cards.traced", 
                    "VGCLabels.trace.target", "VGCLabels.intended.kickoff", "VGCLabels.concurrent.kickoff", "VGCLabels.arraylet.leaf", 
                    "WRTLabels.free.heap.min", "WRTLabels.free.heap.max", "WRTLabels.free.heap.mean", 
                    "WRTLabels.free.immortal.min", "WRTLabels.free.immortal.max", 
                    "WRTLabels.free.immortal.mean", "WRTLabels.free.heap.cycles" };
                  mapTupleNamesToAxis(names, bytesAxis);
                }
              
                private void createNumberAxis() {
                  YDataAxis numberAxis = VGCAxes.prepareNumberAxis(this.properties);
              
                  String[] names = { "VGCLabels.cards.cleaned", "VGCLabels.soft.references.cleared", 
                    "VGCLabels.phantom.references.cleared", "VGCLabels.weak.references.cleared", 
                    "VGCLabels.soft.references.before.collection", "VGCLabels.phantom.references.before.collection", 
                    "VGCLabels.weak.references.before.collection", "VGCLabels.soft.references.after.collection", 
                    "VGCLabels.phantom.references.after.collection", "VGCLabels.weak.references.after.collection", 
                    "VGCLabels.max.soft.reference.threshold", "VGCLabels.weak.references.queued", 
                    "VGCLabels.soft.references.queued", "VGCLabels.phantom.references.queued", 
                    "VGCLabels.final.references.queued", "VGCLabels.final.references.cleared", 
                    "VGCLabels.jni.references.cleared", "VGCLabels.jni.references.queued", 
                    "VGCLabels.dynamic.soft.reference.threshold", "VGCLabels.classes.unloaded", 
                    "VGCLabels.class.loaders.unloaded", "VGCLabels.objects.queued.for.finalization", 
                    "VGCLabels.pinned.classes", "VGCLabels.objects.flipped", "VGCLabels.objects.compacted", 
                    "VGCLabels.objects.tenured", "VGCLabels.objects.failed.flipped", 
                    "VGCLabels.objects.failed.tenured", "VGCLabels.primitive.arraylet.largest.object", 
                    "VGCLabels.primitive.arraylet.leaves", "VGCLabels.primitive.arraylet.objects", 
                    "VGCLabels.reference.arraylet.largest.object", "VGCLabels.reference.arraylet.leaves", 
                    "VGCLabels.reference.arraylet.objects", "VGCLabels.gmp.collections", 
                    "VGCLabels.objects.copied.eden", "VGCLabels.objects.copied.other", 
                    "VGCLabels.non.local.percent.numa", "WRTLabels.min.gc.thread.priority", "WRTLabels.max.gc.thread.priority" };
                  mapTupleNamesToAxis(names, numberAxis);
                }
              
                private void createDiscreteNumberAxis() {
                  YDataAxis numberAxis = 
                    VGCAxes.prepareDiscreteNumberAxis(this.properties);
              
                  String[] names = { "WRTLabels.quanta.per.heartbeat" };
                  mapTupleNamesToAxis(names, numberAxis);
                }
              
                private void createPercentAxis() {
                  YDataAxis percentAxis = VGCAxes.preparePercentAxis(this.properties);
              
                  String[] names = { "VGCLabels.tilt.ratio" };
                  mapTupleNamesToAxis(names, percentAxis);
                }
              
                private void createRateAxis() {
                  YDataAxis rateAxis = VGCAxes.prepareRateAxis(this.properties);
              
                  String[] names = { "VGCLabels.trace.rate" };
                  mapTupleNamesToAxis(names, rateAxis);
                }
              
                private void createAgeAxis() {
                  YDataAxis ageAxis = VGCAxes.prepareAgeAxis(this.properties);
              
                  String[] names = { "VGCLabels.tenure.age" };
                  mapTupleNamesToAxis(names, ageAxis);
                }
              
                private void createObjectsTenuredAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis objectsTenuredAxis = 
                    VGCAxes.prepareObjectsMovedAxis(this.properties);
                  AmountFlippedConverter amountTenuredConverter = new AmountFlippedConverter();
              
                  String[] names = { "VGCLabels.amount.tenured" };
              
                  objectsTenuredAxis.addUnitConverter(amountTenuredConverter);
                  this.countTupleNamesToAmountFlippedConverters.put("VGCLabels.objects.tenured", 
                    amountTenuredConverter);
                  mapTupleNamesToAxis(names, objectsTenuredAxis);
                }
              
                private void createObjectsFailedTenuredAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis objectsTenuredAxis = 
                    VGCAxes.prepareObjectsMovedAxis(this.properties);
                  AmountFlippedConverter amountFailedTenuredConverter = new AmountFlippedConverter();
              
                  String[] names = { "VGCLabels.amount.failed.tenured" };
              
                  objectsTenuredAxis.addUnitConverter(amountFailedTenuredConverter);
                  this.countTupleNamesToAmountFlippedConverters.put("VGCLabels.objects.failed.tenured", 
                    amountFailedTenuredConverter);
                  mapTupleNamesToAxis(names, objectsTenuredAxis);
                }
              
                private void createFlippedAxis() throws GCAndMemoryVisualizerException {
                  YDataAxis flippedAxis = 
                    VGCAxes.prepareObjectsMovedAxis(this.properties);
                  AmountFlippedConverter amountFlippedConverter = new AmountFlippedConverter();
              
                  String[] names = { "VGCLabels.amount.flipped" };
              
                  flippedAxis.addUnitConverter(amountFlippedConverter);
              
                  this.countTupleNamesToAmountFlippedConverters.put("VGCLabels.objects.flipped", 
                    amountFlippedConverter);
                  mapTupleNamesToAxis(names, flippedAxis);
                }
              
                private void createFailedFlippedAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis flippedAxis = 
                    VGCAxes.prepareObjectsMovedAxis(this.properties);
                  AmountFlippedConverter amountFailedFlippedConverter = new AmountFlippedConverter();
              
                  String[] names = { "VGCLabels.amount.failed.flipped" };
              
                  flippedAxis.addUnitConverter(amountFailedFlippedConverter);
              
                  this.countTupleNamesToAmountFlippedConverters.put("VGCLabels.objects.failed.flipped", 
                    amountFailedFlippedConverter);
                  mapTupleNamesToAxis(names, flippedAxis);
                }
              
                private void createCopiedFromEdenAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis copiedEdenAxis = 
                    VGCAxes.prepareObjectsCopiedAxis(this.properties);
                  AmountFlippedConverter amountCopiedConverter = new AmountFlippedConverter();
              
                  String[] names = { "VGCLabels.amount.copied.eden" };
              
                  copiedEdenAxis.addUnitConverter(amountCopiedConverter);
              
                  this.countTupleNamesToAmountFlippedConverters.put("VGCLabels.objects.copied.eden", 
                    amountCopiedConverter);
                  mapTupleNamesToAxis(names, copiedEdenAxis);
                }
              
                private void createCopiedFromOtherAxis() throws GCAndMemoryVisualizerException
                {
                  YDataAxis copiedEdenAxis = 
                    VGCAxes.prepareObjectsCopiedAxis(this.properties);
                  AmountFlippedConverter amountCopiedConverter = new AmountFlippedConverter();
              
                  String[] names = { "VGCLabels.amount.copied.other" };
              
                  copiedEdenAxis.addUnitConverter(amountCopiedConverter);
              
                  this.countTupleNamesToAmountFlippedConverters.put("VGCLabels.objects.copied.other", 
                    amountCopiedConverter);
                  mapTupleNamesToAxis(names, copiedEdenAxis);
                }
              
                private void createRestartAxis() {
                  YDataAxis restartAxis = VGCAxes.prepareRestartAxis(this.properties);
              
                  String[] names = { "VGCLabels.jvm.restarts" };
              
                  mapTupleNamesToAxis(names, restartAxis);
                }
              
                private void createGCActivityAxis() {
                  YDataAxis gcActivityAxis = VGCAxes.prepareEventAxis(this.properties);
              
                  String[] names = { "WRTLabels.gc.activity" };
              
                  mapTupleNamesToAxis(names, gcActivityAxis);
                }
              
                private void createQuantumTypeAxis() {
                  YDataAxis quantumTypeAxis = VGCAxes.prepareQuantumTypeAxis(this.properties);
              
                  String[] names = { "WRTLabels.quantum.type" };
              
                  mapTupleNamesToAxis(names, quantumTypeAxis);
                }
              
                private void createGCReasonsAxis()
                {
                  YDataAxis gcReasonsAxis = 
                    VGCAxes.prepareGCReasonsAxis(this.properties);
              
                  String[] names = { "VGCLabels.gc.reasons" };
              
                  mapTupleNamesToAxis(names, gcReasonsAxis);
                }
              
                private void createGCScopesAxis() {
                  YDataAxis gcReasonsAxis = VGCAxes.prepareGCScopeAxis(this.properties);
              
                  String[] names = { "VGCLabels.gc.scopes" };
              
                  mapTupleNamesToAxis(names, gcReasonsAxis);
                }
              
                private void createAFSuccessAxis() {
                  YDataAxis afSuccessAxis = 
                    VGCAxes.prepareAFSuccessAxis(this.properties);
              
                  String[] names = { "VGCLabels.af.success" };
              
                  mapTupleNamesToAxis(names, afSuccessAxis);
                }
              
                private void createGCPercolatedAxis() {
                  YDataAxis gcPercolatedAxis = 
                    VGCAxes.prepareGCPercolatedAxis(this.properties);
                  String[] names = { "VGCLabels.gc.percolated" };
                  mapTupleNamesToAxis(names, gcPercolatedAxis);
                }
              
                private void createActionAxis() {
                  YDataAxis actionAxis = VGCAxes.prepareActionAxis(this.properties);
              
                  String[] names = { "VGCLabels.action" };
              
                  mapTupleNamesToAxis(names, actionAxis);
                }
              }

